package main

import (
	"log"
	"net"
	"strings"
)

func main() {
	//建立服务端
	listener, err := net.Listen("tcp", ":9000")
	if err != nil {
		log.Printf("err=%v", err)
	}
	//不监听时进行资源的关闭
	defer listener.Close()
	log.Println("socket create success，socket listening")
	for {
		//接受连接 次数需要多次连接
		conn, err := listener.Accept()
		log.Println("connected success", conn.RemoteAddr().String())
		if err != nil {
			log.Printf("err=%v", err)
		}
		//每当有一个连接过来的时候，单独起协程进行处理
		go handlerConn(conn)
	}
}
func handlerConn(conn net.Conn) {
	//当连接关闭后 进行关闭
	defer conn.Close()
	//持续与客户端交互
	for {
		data := make([]byte, 1024*10)
		n, err := conn.Read(data)
		if err != nil {
			log.Printf("err=%v", err)
			break
		}
		str := string(data[:n])
		log.Printf("rece data=%s,datalength=%d ", str, len(str))
		//if "EXIT"==strings.ToUpper(strings.Replace(str,"\\n","",-1)){
		//当客户端传来 exit ，同时给客户端回复一个bye 进行断开
		if strings.Compare(strings.Replace(str, "\r\n", "", -1), "exit") == 0 {
			_, err := conn.Write([]byte("bye"))
			if err != nil {
				log.Println(err)
			}
			log.Printf("rece exit goodbye ")
			conn.Close()
			break
		}
		//服务端收到什么 就给客户端回复什么
		conn.Write(data[:n])
	}
}
